/*
 * taskMotor.c
 *  该模块用于动态开启定时电机控制任务和关闭的
 *  Created on: 2025.5.30
 *      Author: TracyHenry
 */
#include "taskMotor.h"
#include <stdio.h>


// 定义一个信号量，用于防止多次触发
SemaphoreHandle_t triggerSemaphore = NULL;
 
// 定义任务句柄，用于管理任务
TaskHandle_t dynamicTaskHandle = NULL;

/******************************************************************************
 * FunctionName : taskTimerMotorControl
 * Description  : 开启定时控制电机
 * Parameters   : uint8_t const * argument 参数为电机开启的时间
 * Returns      : void
*******************************************************************************/
void taskTimerMotorControl(void * argument)
{
  uint32_t *count_max = (uint32_t *)argument;
	uint32_t count_max_2 = (*count_max);
  uint32_t count = 0;
  /* USER CODE BEGIN taskMotorControl */
  /* Infinite loop */
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
	printf("taskTimerMotorControl task start:%d!\n",count_max_2);
  while (count < count_max_2)
  {
    count ++;
    osDelay(1000);
    printf("count:%d!\n",count);
  }
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
  vStopAndDeleteTask();
  /* USER CODE END taskMotorControl */
}


// 在某个地方停止并删除任务
void vStopAndDeleteTask(void) {
    printf("vStopAndDeleteTask\n");
    if (dynamicTaskHandle != NULL) {
       printf("xSemaphoreGive(triggerSemaphore)1;\n");
      if (triggerSemaphore != NULL) {
          printf("xSemaphoreGive(triggerSemaphore)2;\n");
          xSemaphoreGive(triggerSemaphore); // 初始状态为可触发
      }
        // 删除任务
        vTaskDelete(dynamicTaskHandle);
        dynamicTaskHandle = NULL; // 清除句柄
    }
}
